package com.lukebang.util;

import java.util.HashMap;
import java.util.Map;

import org.springframework.cglib.beans.BeanMap;

import com.alibaba.fastjson.JSONObject;

/**
 * 鹿客公司内部使用的对bean进行操作的工具类
 * 根据方法名知道bean进行的操作内容
 * @author xiaGuanghui 2017年5月26日 下午5:14:07
 *
 */
public class LuKeBeanUtil {
		
	/**
	 * 把jsonString转化为对应的javaBean
	 *xiaGuanghui 2017年6月4日 下午2:58:50 
	 *@param jsonString
	 *@param beanClass
	 *@return
	 */
	public static<T> T fromJSONObjectToBean(String jsonString ,Class<T> beanClass){
		
		JSONObject jsonObject = JSONObject.parseObject(jsonString);
		
		return fromJSONObjectToBean(jsonObject,beanClass);
	}
	
	/**
	 * 把jsonObject转化为对应的javaBean
	 *xiaGuanghui 2017年6月4日 下午2:58:39 
	 *@param jsonObject
	 *@param beanClass
	 *@return
	 */
	@SuppressWarnings("static-access")
	public static<T> T fromJSONObjectToBean(JSONObject jsonObject,Class<T> beanClass){
		//返回参数
	    return (T)jsonObject.toJavaObject(jsonObject,beanClass);
	}
	
	
	/**
	 * 把bean中不为null的值转化为Map集合,并返回一个map集合
	 *xiaGuanghui 2017年6月4日 下午2:58:32 
	 *@param object
	 *@return
	 */
	@SuppressWarnings("unchecked")
	public static Map<String,Object> fromBeanToMap(Object object){
		JSONObject jsonObject = JSONObject.parseObject(JSONObject.toJSONString(object));
		return fromJSONObjectToBean(jsonObject,Map.class);
	}
	
	/**
	 * 把bean转化为Map集合，并返回map集合
	 *xiaGuanghui 2017年6月4日 下午6:20:54 
	 *@param bean
	 *@return
	 */
	public static<T> Map<String,Object> beanToMap(T bean){
		Map<String,Object> map = new HashMap<String, Object>();
		if(bean!=null){
			BeanMap beanMap = BeanMap.create(bean);
			for(Object key:beanMap.keySet()){
				map.put(key+"", beanMap.get(key));
			}
		}
		return map;
	}
	
	/**
	 * 把map集合转化为bean
	 *xiaGuanghui 2017年6月4日 下午6:15:16 
	 *@param param
	 *@param bean
	 *@return
	 */
	public static<T> T mapToBean(Map<String,Object> param,T bean){
		BeanMap beanMap = BeanMap.create(bean);
		beanMap.putAll(param);
		return bean;
	}
	
	
	
	
	
}
